<?php
global $objClases,$basedatos;

//Funcion para limpiar temporales (los creados en los ultimos 60 minutos)
function limpiaTmp($tmpDir){
	$seconds_old = 3600;
	$directory = $tmpDir;
	
	if( !$dirhandle = @opendir($directory) ) return;

	while( false !== ($filename = readdir($dirhandle)) ){
		if( $filename != "." && $filename != ".." ){
			$filename = $directory . $filename;
			if( @filemtime($filename) < (time()-$seconds_old) )
				if(!@unlink($filename))
					echo 'No se pudo eliminar. ' . $filename;
		}
	}
}

if(getParametro($_FILES,'us',0) != 0){
	//Recivimos el archivo ZIP con las Tablas
	
	//Ubicacion donde guardar
	$ubicacion = $objClases->get('ruta_absoluta') . 'bd/dbf/';
	
	//Revisamos el tipo de archivo
	//DBF -> application/octet-stream
	//ZIP -> application/zip
	$tipo = strtolower($_FILES['us']['type']);
	
	//Existe el archivo "temporal"
	if (isset($_FILES['us']['tmp_name'])) {
		if (strpos($tipo,'zip') != 0) {
			$archivo = $ubicacion.$_FILES['us']['name'];
			if (!copy($_FILES['us']['tmp_name'], $archivo)){
				echo '<script>window.parent.clearMensaje(); window.parent.mensaje("Error al tratar de subir el archivo.",parent._MENSAJE_ERROR); parent.setMensaje("");</script>' . "\n";
			}else{
				//Mostramos mensaje al usuario mientras descomprimimos el archivo
				echo '<script>window.parent.setMensaje("Analizando archivo...");</script>' . "\n";
				flush();
				
				//Descomprimimos
				
				//Libreria de PhpConcept.net
				require_once($objClases->get('ruta_absoluta') . '/includes/pclzip/pclzip.lib.php');
				
				
				$archivoZip = new PclZip($archivo);
				if($lista = $archivoZip->listContent()){
					$requeridos = array('DRET.DBF','DCAT.DBF','DALU.DBF','DLIS.DBF','DGAU.DBF');
					$encontrados = array(0,0,0,0,0);
					for($ar=0;$ar<sizeof($lista);$ar++) {
						$archivo_encontrado = $lista[$ar]['filename'];
						for($req=0;$req<count($requeridos);$req++){
							if($requeridos[$req] == $archivo_encontrado)
								$encontrados[$req] = 1;
						}
					}
					
					for($enc=0;$enc < count($requeridos) ; $enc++)
						if(!$encontrados[$enc]){
							echo '<script>window.parent.clearMensaje(); window.parent.mensaje("No contiene los archivos necesarios. (Compruebe que el nombre del archivo y la extensi&oacute;n est&eacute;n en may&uacute;sculas.)",parent._MENSAJE_ERROR); parent.setMensaje("");</script>' . "\n";
							exit();
						}
					echo '<script>window.parent.setMensaje("Extrayendo archivos...");</script>' . "\n";	
					
					//Extraemos
  					if ($archivoZip->extract(PCLZIP_OPT_PATH, $ubicacion,
                        PCLZIP_OPT_REMOVE_PATH,'') == 0){
    					echo '<script>parent.clearMensaje(); window.parent.mensaje("' . $archivoZip->errorInfo(true) . '",parent._MENSAJE_ERROR); parent.setMensaje("");</script>' . "\n";
						exit();
  					}
					
					//Comenzamos seccion DBF
					require_once($objClases->get('ruta_absoluta'). 'includes/DbfMysql.php');
					require_once($objClases->get('ruta_absoluta'). 'includes/Dbf.php');

					//Agregando usuarios (alumnos)
					echo '<script>window.parent.setMensaje("Analizando archivo alumnos...");</script>' . "\n";
					$dbf = new DbfMysql($ubicacion . '/DALU.DBF');
					
					//Comprobamos que este abierto el archivo
					if(!$dbf->Dbf->dbf->open()){
						echo '<script>parent.clearMensaje(); window.parent.mensaje("El archivo de alumnos no se ha abierto.",parent._MENSAJE_ERROR); parent.setMensaje("");</script>' . "\n";
						exit();
					}
					
					//Campos
					$camposDbf = array('ALU_CTR','ALU_NIN');
					$camposMysql = array('Id_Usuario','Us_Nombre');
					$camposMysqlDefecto = array(array('Us_Bloqueado',1),array('Id_Nivel',3));
					$registros = $dbf->Dbf->numRegistros;
					echo '<script>window.parent.setMensaje("'. $registros .' registros en alumnos, importando...");</script>' . "\n";
					flush();
					
					//Agregamos a mysql
					$resAlumnos = $dbf->downloadFromDBFtoMySQL($camposDbf,$camposMysql,'#__usuarios',$camposMysqlDefecto);
					if(!$resAlumnos){
						$error = str_replace("\x8c","",$dbf->getError());
						die ('<script>parent.clearMensaje(); window.parent.mensaje("Error al insertar alumnos.<br />'. $error . '",parent._MENSAJE_ERROR);</script>' . "\n");
					}
					echo '<script>parent.setMensaje("Se agregaron ' . $resAlumnos['insertados'] . ' con ' . $resAlumnos['repetidos'] . ' repetidos");</script>' . "\n";
					//Cerramos el dbf
					$dbf->Dbf->dbf->close();
					
					//Agregando usuarios (docentes)
					echo '<script>parent.setMensaje("Analizando archivo docentes...");</script>' . "\n";
					$dbf = new DbfMysql($ubicacion . '/DCAT.DBF');
					
					//Comprobamos que este abierto el archivo
					if(!$dbf->Dbf->dbf->open()){
						echo '<script>parent.clearMensaje(); window.parent.mensaje("El archivo de docentes no se ha abierto.",parent._MENSAJE_ERROR); parent.setMensaje("");</script>' . "\n";
						exit();
					}
					
					//Campos
					$camposDbf = array('CAT_CVE','CAT_NOM');
					$camposMysql = array('Id_Usuario','Us_Nombre');
					$camposMysqlDefecto = array(array('Us_Bloqueado',1),array('Id_Nivel',2));
					$registros = $dbf->Dbf->numRegistros;
					echo '<script>parent.setMensaje("'. $registros .' registros en docentes, importando...");</script>' . "\n";
					flush();
					
					//Agregamos a mysql
					$resDocentes = $dbf->downloadFromDBFtoMySQL($camposDbf,$camposMysql,'#__usuarios',$camposMysqlDefecto);
					if(!$resDocentes)
						die ('<script>parent.clearMensaje(); window.parent.mensaje("Error al insertar docentes.<br />'. $dbf->getError() . ',parent._MENSAJE_ERROR);</script>' . "\n");
					echo '<script>parent.setMensaje("Se agregaron ' . $resDocentes['insertados'] . ' con ' . $resDocentes['repetidos'] . ' repetidos");</script>' . "\n";
					//Cerramos el dbf
					$dbf->Dbf->dbf->close();
					
					//Agregando materias
					echo '<script>parent.setMensaje("Analizando archivo materias...");</script>' . "\n";
					$dbf = new DbfMysql($ubicacion . '/DRET.DBF');
					
					//Comprobamos que este abierto el archivo
					if(!$dbf->Dbf->dbf->open()){
						echo '<script>parent.clearMensaje(); window.parent.mensaje("El archivo de materias no se ha abierto.",parent._MENSAJE_ERROR); parent.setMensaje("");</script>' . "\n";
						exit();
					}
					
					//Campos
					$camposDbf = array('RET_CVE','RET_CVO','RET_NOM');
					$camposMysql = array('Id_Materia','Ma_Clave','Ma_Nombre');
					$registros = $dbf->Dbf->numRegistros;
					echo '<script>parent.setMensaje("'. $registros .' registros en materias, importando...");</script>' . "\n";
					flush();
					
					//Agregamos a mysql
					$resMaterias = $dbf->downloadFromDBFtoMySQL($camposDbf,$camposMysql,'#__materias');
					if(!$resMaterias)
						die ('<script>parent.clearMensaje(); window.parent.mensaje("Error al insertar materias.<br />'. $dbf->getError() . ',parent._MENSAJE_ERROR); </script>' . "\n");
					echo '<script>parent.setMensaje("Se agregaron ' . $resMaterias['insertados'] . ' con ' . $resMaterias['repetidos'] . ' repetidos");</script>' . "\n";
					//Cerramos el dbf
					$dbf->Dbf->dbf->close();
					
					//Limpiamos todos los registros de alumnos/docentes con materias
					$basedatos->consultaPrefijo('TRUNCATE TABLE #__um');
					
					//Agregando alumnos a materias
					echo '<script>parent.setMensaje("Analizando archivo materias de alumnos...");</script>' . "\n";
					$dbf = new DbfMysql($ubicacion . '/DLIS.DBF');
					
					//Comprobamos que este abierto el archivo
					if(!$dbf->Dbf->dbf->open()){
						echo '<script>parent.clearMensaje(); window.parent.mensaje("El archivo de materias de alumnos no se ha abierto.",parent._MENSAJE_ERROR);</script>' . "\n";
						exit();
					}
					
					//Campos
					$camposDbf = array('LIS_CTR','LIS_MAT');
					$camposMysql = array('Id_Usuario','Id_Materia');
					$registros = $dbf->Dbf->numRegistros;
					echo '<script>parent.setMensaje("'. $registros .' registros en materias de alumnos, importando...");</script>' . "\n";
					flush();
					
					//Agregamos a mysql
					$resMateriasAlu = $dbf->downloadFromDBFtoMySQL($camposDbf,$camposMysql,'#__um');
					if(!$resMateriasAlu)
						die ('<script>parent.clearMensaje(); window.parent.mensaje("Error al insertar materias de alumnos.<br />'. $dbf->getError() . '",parent._MENSAJE_ERROR);</script>' . "\n");
					echo '<script>parent.setMensaje("Se agregaron ' . $resMateriasAlu['insertados'] . ' con ' . $resMateriasAlu['repetidos'] . ' repetidos");</script>' . "\n";
					//Cerramos el dbf
					$dbf->Dbf->dbf->close();
					
					//Agregando docentes a materias
					echo '<script>parent.setMensaje("Analizando archivo materias de docentes...");</script>' . "\n";
					$dbf = new DbfMysql($ubicacion . '/DGAU.DBF');
					
					//Comprobamos que este abierto el archivo
					if(!$dbf->Dbf->dbf->open()){
						echo '<script>parent.clearMensaje(); window.parent.mensaje("El archivo de materias de docentes no se ha abierto.",parent._MENSAJE_ERROR); </script>' . "\n";
						exit();
					}
					
					//Campos
					$camposDbf = array('GPO_MAT', 'GPO_CAT');
					$camposMysql = array('Id_Materia', 'Id_Usuario');
					$registros = $dbf->Dbf->numRegistros;
					echo '<script>parent.setMensaje("'. $registros .' registros en materias de docentes, importando...");</script>' . "\n";
					flush();
					
					//Agregamos a mysql
					$resMateriasDoc = $dbf->downloadFromDBFtoMySQL($camposDbf,$camposMysql,'#__um');
					if(!$resMateriasDoc)
						die ('<script>parent.clearMensaje(); window.parent.mensaje("Error al insertar materias de docentes.<br />'. $dbf->getError() . '",parent._MENSAJE_ERROR); parent.setMensaje("");</script>' . "\n");
					echo '<script>parent.setMensaje("Se agregaron ' . $resMateriasDoc['insertados'] . ' con ' . $resMateriasDoc['repetidos'] . ' repetidos");</script>' . "\n";
					//Cerramos el dbf
					$dbf->Dbf->dbf->close();
					
					//Limpieza de registros vacios
					echo '<script>parent.setMensaje("Realizando limpieza...");</script>' . "\n";
					flush();
					
					//um
					$consulta = $basedatos->consultaPrefijo('DELETE FROM #__um WHERE Id_Usuario=0 OR Id_Materia=\'0\'');
					if(!$consulta) echo $basedatos->stderr(true);
					$registrosEliminados = $basedatos->getFilasAfectadas();
					//usuarios
					$basedatos->consultaPrefijo('DELETE FROM #__usuarios WHERE Id_Usuario=0 OR Us_Nombre=\'\'');
					$registrosEliminados += $basedatos->getFilasAfectadas();
					//materias
					$basedatos->consultaPrefijo('DELETE FROM #__materias WHERE Id_Materia=\'0\' OR Ma_Nombre=\'\'');
					$registrosEliminados += $basedatos->getFilasAfectadas();
					
					//Eliminamos contenido del zip y lo cerramos
					$archivoZip->delete();
					$archivoZip->privCloseFd();
					
					//Limpiamos temporal
					if(!limpiaTmp($ubicacion))
						$eliminaTmp = 'false';
					else
						$eliminaTmp = 'true';
					
					//Reporte final
					echo '<script>
						var pArr = new Array('. $resAlumnos['insertados'] . ',' . $resAlumnos['repetidos'] . ',' . $resDocentes['insertados'] . ',' . $resDocentes['repetidos'] . ',' . $resMaterias['insertados'] . ',' . $resMaterias['repetidos'] .',' . $registrosEliminados . ',' . $eliminaTmp . ');
						window.parent.generaReporte(pArr);
						</script>' . "\n";
				}else
					//No se pudo abrir el archivo
					echo '<script>window.parent.clearMensaje(); window.parent.mensaje("Zip posiblemente corrupto.",parent._MENSAJE_ERROR);</script>' . "\n";
			}
				
		}else
			echo '<script>window.parent.mensaje("Solo se permiten archivos .zip.",window.parent._MENSAJE_ERROR); window.parent.clearMensaje();</script>' . "\n";
	}else 
		echo '<script>parent.clearMensaje(); parent.mensaje("Error al tratar de subir el archivo.",parent._MENSAJE_ERROR);</script>' . "\n";
	exit();
}
?>
<form name="frmImportar" id="frmImportar" action="<?php echo $objClases->get('sitio_vivo'); ?>/administracion/?sec=idbf&amp;modo=asincrono" method="post" enctype="multipart/form-data" target="iframeUpload">
	<table align="center">
		<tr>
			<th>
				Importar Datos
				<br />
				<br />
			</th>
		</tr>
	</table>
	
	<!-- Panel de mensajes -->
    <div id="panel" class="mensaje">
	<span id="panel-mensaje">&nbsp;</span>
    </div>
    <!-- Fin panel -->
	
	<table id="tablaDeArchivos" class="tablas" align="center">
		<tr>
			<th colspan="2" class="LineaA">
			</th>
		</tr>
		<tr>
			<td>
				<table>
					<tr class="espaciado">
						<td>
							<label for="us">
								Archivos DBF (Zip):
							</label>
						</td>
						<td>
							<input type="file" name="us" id="us" class="archivos" />
						</td>
					</tr>
					<tr>
						<td>
						</td>
						<td align="right">
							<span class="comentarios">
								Archivo compreso (ZIP) con todas las tablas de SIE
							</span>
						</td>
					</tr>
				</table>
			</td>
		</tr>
	</table>
	<br />
	<br />
	<table align="center">
		<tr>
			<td align="center">
				<input type="submit" name="btnImportar" id="btnImportar" value="Importar datos" class="botones" onclick="validaExtensiones(); return false;" />
			</td>
			<!--
			<td class="enlace">
				&nbsp;&nbsp;
				<a href="#" id="aArchivosIndividuales" onclick="archivosIndividuales();">
				<img src="<?php echo $objClases->get('sitio_vivo'); ?>/administracion/modulos/mod_idbf/recursos/archivos.gif" alt="Cargar Archivos Individuales" title="Cargar Archivos Individuales"/>
				</a>
				<br />
			</td> -->
		</tr>
	</table>
	<p align="center">
		<img id="imgCargando" width="16" height="16" alt="" title="" src="<?php echo $objClases->get('sitio_vivo'); ?>/administracion/modulos/mod_idbf/blank.png" />
		<span id="mensajes" class="mensajesiDbf"></span>
	</p>
	<iframe name="iframeUpload" id="iframeUpload" style="display:none;"></iframe>
</form>
